#pragma once

#include <vector>


class IRenderableObject;
struct D3DXVECTOR3;

class ICameraImpl
{
public:
   virtual ~ICameraImpl(void) {}

   virtual void setViewport(UINT x, UINT y, UINT width, UINT height, float nearZPlane, float farZPlane) = 0;

   virtual void setFOV(float angle) = 0;

   virtual const D3DXVECTOR3& getPosition() const = 0;
   virtual void setPosition(const D3DXVECTOR3& vec) = 0;

   virtual const D3DXVECTOR3& getRightVec() const = 0;
   virtual void setRightVec(const D3DXVECTOR3& vec) = 0;

   virtual const D3DXVECTOR3& getUpVec() const = 0;
   virtual void setUpVec(const D3DXVECTOR3& vec) = 0;

   virtual const D3DXVECTOR3& getLookVec() const = 0;
   virtual void setLookVec(const D3DXVECTOR3& vec) = 0;

   virtual void lookAt(const D3DXVECTOR3& lookAtPt) = 0;

   virtual void render(const std::vector<IRenderableObject*>& renderableObjects) = 0;
};
